package com.xxxtea.config;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import java.util.concurrent.LinkedBlockingQueue;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit;

/**
 * 线程池配置类
 * 
 * 配置全局线程池，统一管理异步任务线程资源。
 * - 设置核心线程数、最大线程数、队列容量、空闲线程存活时间等参数
 * - 使用CallerRunsPolicy作为拒绝策略，保证任务不会丢失
 * 
 * @author badman
 * @since 1.0.0
 */
@Configuration
public class ThreadPoolConfig {
	/**
	 * 配置全局线程池
	 * 
	 * @return 线程池执行器
	 */
	@Bean
	public ThreadPoolExecutor threadPoolExecutor() {
		return new ThreadPoolExecutor(
				10, // 核心线程数
				20, // 最大线程数
				60, // 空闲线程存活时间（单位：秒）
				TimeUnit.SECONDS,
				new LinkedBlockingQueue<>(50), // 队列容量
				new ThreadPoolExecutor.CallerRunsPolicy() // 拒绝策略：由调用线程执行
		);
	}
}